package compilationunit;

public class Tercetos{
    //File fichero;
    //BufferedWriter bw;
    String union;
    String etiqueta ="etiqueta";
    String temporal ="$temporal";
    int c_etiqueta;
    int c_temporal;
    
    //public Tercetos(String nombre){
            //fichero= new File(nombre);
        public Tercetos(){
            c_etiqueta = 0;
            c_temporal = 0;
        /*    
        try {
            bw= new BufferedWriter(new FileWriter(nombre));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        */
    }
      
    public String darTemporal(){
        c_temporal = c_temporal + 1;
        return temporal + c_temporal;
    }
    
    public String darEtiqueta(){
        c_etiqueta = c_etiqueta + 1;
        return etiqueta + c_etiqueta;
    }
    
    public String insertarEtiqueta(String etiqueta){

            return "ETIQUETA,,,"+etiqueta+"\n";
    }
    
   /* public void cerrarFichero(){
        try {
            bw.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }}
    */

    // Comienzan las funciones en las que hay que llamar a la funcion "generar"

    public String operacionBinaria(String op1,String op2,String op_binaria,String resultado){
       
		return op_binaria +"," +op1 +","+ op2+ ","+resultado+"\n";
                
		
    }
    
    public String operacionUnaria(String op1, String operador){

		return operador+","+op1+","+"1"+","+op1+"\n";
                
    }
    
    public String asignacion(String op1, int op2){

    return "ASIGNACION,"+op1+","+op2+",\n";
    }
    
    public String asignacion(String op1, String op2){

    return "ASIGNA,"+op1+","+op2+",\n";
    }
    public String saltoIncondicional(String etiqueta){

		return "GOTO,,,"+etiqueta+"\n";
    }
    
    public String saltoCondicional(String dir, String etiqueta){

		return "IF,"+dir+",,"+etiqueta+"\n";
    }
    
    public String retorno(String nombre){

        return "RETURN,,,"+nombre+"\n";
    }//revisar como pasarle el tipo
    
    public String asignaArray(String op1,String nombre,int num){

        return "AARRAYNUN,"+op1+","+nombre+","+num+"\n";
    }
    
    public String asignaArray(String op1,String nombre,String indice){

        return "AARRAYIND,"+op1+","+nombre+","+indice+"\n";
    }
    
    public String meteEnArray(String op1,String nombre,int num){

        return "EN_ARRAY,"+op1+","+nombre+","+num+"\n";
    }
    
    public String meteEnArray(String op1,String nombre,String num){

        return "EN_ARRAY,"+op1+","+nombre+","+num+"\n";
    }
    
  /*  public void escribir(String terceto){
            try {
                bw.write(terceto);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
    }
    */
    /*public String funcion(String nombre, int numparametros,String parametros[],String retorno){
		//nombre de la etiqueta
                
		union=this.daretiqueta()+":\n";
                for (int i=0;i<numparametros;i++){
			union=union+"\t"+this.dartemporal()+"= POP "+parametros[i]+"\n";
		}
		union=union+ "\tcall "+nombre+","+numparametros+"\n";
                for (int ii=numparametros-1;ii>=0;ii--){
			union=union+"\tPOP "+parametros[ii]+"\n";
		}
        try {
            bw.write(union);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
                return union;
    }*/
    
    public String[] llamaAFuncion(String nombre, int num_par,String parametros[]){
                
                String resultado[] = new String[num_par + 1];
		int i = 0;
                for (; i<num_par; i++){
			resultado[i] = "PARAM,"+parametros[i]+",,\n";
		}
                resultado[i] = "CALL,"+nombre+","+num_par+",\n";
                return resultado;
    }
    
    
    public String putW(String op1){
     
    return "PUTW,"+op1+",,\n";
    }
    
    public String putS(String op1){
     
    return "PUTS,"+op1+",,\n";
    }
    
    public String putL(){
     
    return "PUTL,,,\n";
    }
    
    public String getW(String op1){
     
    return "GETW,"+op1+",,\n";}
    
    public String not(String op1){
    return "NOT,"+op1+",,\n";}    
        
    public String devValor(String op1){
        return "DEVVALOR,"+op1+",,\n";
    }
} 